#pragma once

class IRenderModelMatrix:
	public IRender,
	public IOcclusionTester,
	public IFrustumTester
{
public:
	IRenderModelMatrix();
	virtual ~IRenderModelMatrix();

	/*--IRender-----------------------------------------------------------------*/
	virtual void				CalcModelMatrices() override;
	virtual const glm::mat4&	GetModelMatrix() const override;

	/*--------------------------------------------------------------------------*/

	void				SetScale(float scale);
	void				SetScale(const glm::vec3& scale);
	const glm::vec3&	GetScale() const;

	void				SetTranslation(const glm::vec3& translate);
	const glm::vec3&	GetTranslation() const;

	void				SetRotation(const glm::vec3& rotation);
	void				RotateX(float val);
	void				RotateY(float val);
	void				RotateZ(float val);
	const glm::quat&	GetRotation() const;

	void				Zero();

private:
	glm::mat4			m_ModelMatrix;
	glm::vec3			m_ModelTrans;
	glm::quat			m_ModelQuaternionRotation;
	glm::vec3			m_ModelScale;
	bool				m_modelMatrixNeedsRecalc;
};